package com.winning.juc;

public class TestCompareAndSwap {

    public static void main(String[] args) {
        final CompareAndSwap cas = new CompareAndSwap();

        for (int i = 0; i < 10; i++) {
           new Thread(new Runnable() {
               @Override
               public void run() {
                   int expertedValue = cas.get();
                   boolean flag = cas.compareAndSet(expertedValue,(int)(Math.random() * 100));
                   System.out.println(flag);
               }
           }).start();
        }
    }

}


class CompareAndSwap{
    //模拟内存值
    private int value;

    //获取内存值
    public synchronized int get(){
        return this.value;
    }

    //比较和交换
    public synchronized int compareAndSwap(int expertedValue, int newValue){
        int oldValue = this.value;

        if(expertedValue == this.value){
            value = newValue;
        }

        return oldValue;
    }

    //判断是否修改成功
    public synchronized boolean compareAndSet(int expertedValue, int newValue){
        return expertedValue == compareAndSwap(expertedValue, newValue);
    }

}
